// 导入 Sequelize 的数据类型模块，用于定义模型字段类型
const { DataTypes } = require("sequelize");
// 导入数据库连接实例（已配置好的 Sequelize 连接）
const sequelize = require("../config/db");

// 定义 GaugingPointTemplate 模型（对应数据库中的 gauging_point_template 表）
const GaugingPointTemplate = sequelize.define(
  "GaugingPointTemplate", // Sequelize 内部模型名（大写开头,约定俗成）
  {
    gaugingPointTemplateId: {
      type: DataTypes.INTEGER, // 整数类型
      primaryKey: true, // 设为主键
      autoIncrement: true, // 自动递增
      allowNull: false, // 非空
      field: "gauging_point_template_id", // 映射数据库中的字段名(下划线命名)
      comment: "测点模板 ID，主键", // 字段注释
    },
    equipmentTemplateId: {
      type: DataTypes.INTEGER,
      allowNull: false,
      field: "equipment_template_id",
      comment: "关联设备模板 ID",
    },
    name: {
      type: DataTypes.STRING(100), // 字符串类型，最大长度 100
      allowNull: false,
      comment: "测点模板名称",
    },
    description: {
      type: DataTypes.STRING(500), // 字符串类型，最大长度 500
      allowNull: true,
      comment: "测点描述",
    },
    diameter: {
      type: DataTypes.DECIMAL(10, 2), // 十进制数值类型，最多 10 位，其中小数点后 2 位
      allowNull: false,
      comment: "转轴直径",
    },
    speed: {
      type: DataTypes.DECIMAL(10, 2),
      allowNull: false,
      comment: "测点轴转速",
    },
    xAxial: {
      type: DataTypes.STRING(100),
      allowNull: false,
      field: "x_axial",
      comment: "X 轴向配置",
    },
    yAxial: {
      type: DataTypes.STRING(100),
      allowNull: false,
      field: "y_axial",
      comment: "Y 轴向配置",
    },
    zAxial: {
      type: DataTypes.STRING(100),
      allowNull: false,
      field: "z_axial",
      comment: "Z 轴向配置",
    },
    analysisFrequency: {
      type: DataTypes.INTEGER,
      allowNull: false,
      defaultValue: 2000,
      field: "analysis_frequency",
      comment: "冲击脉冲分析频率",
    },
    vibrationSeverityUpperLimit: {
      type: DataTypes.INTEGER,
      allowNull: false,
      defaultValue: 1000, // 默认值 1000
      field: "vibration_severity_upper_limit",
      comment: "振动烈度上限频率",
    },
    vibrationSeverityLowerLimit: {
      type: DataTypes.INTEGER,
      allowNull: false,
      defaultValue: 10,
      field: "vibration_severity_lower_limit",
      comment: "振动烈度下限频率",
    },
    collectDuration: {
      type: DataTypes.INTEGER,
      allowNull: false,
      defaultValue: 1,
      field: "collect_duration",
      comment: "采集时长",
    },
  },
  {
    tableName: "gauging_point_template", // 显式指定数据库表名（小写,与表名一致）
    freezeTableName: true, // 禁止 Sequelize 自动将表名复数化
    timestamps: false, // 不自动生成 createdAt 和 updatedAt 字段
    comment: "测点模板表",
    // 定义表索引(优化查询性能)
    indexes: [
      {
        fields: ["equipment_template_id"],
        name: "idx_gpt_equipment_template_id",
        // 用途：优化查询某类设备模板的所有测点模板
      },
    ],
  }
);

// 导出模型供其他模块使用
module.exports = GaugingPointTemplate;
